import {DataTableSortStatus} from "mantine-datatable";

// 数据记录接口，最全的record类型
export interface RecordProps {
  id: string; // 项目id-哈希处理过的-因会出现在url中，故应该无规律
  name: string; // 项目名称
  type: "个人项目" | "工程项目"; // 项目类型
  oaId: string | "N/A"; // 如果是指定任务的话，那肯定有OA编号。不建议使用null，而应该要明确告诉用户为N/A
  stage: "设计中" | "审核中" | "已结束"; //

  createdByUserId: string; // 创建人账号
  createdByUserName: string; // 创建人姓名
  createdTime: string; // 创建时间

  executedByUserId: string; // 执行人账号
  executedByUserName: string; // 执行人姓名
  executeSendTime: string; // 执行人执行时间（提交审核时间）

  reviewedByUserId: string; // 审核人账号
  reviewedByUserName: string; // 审核人姓名
  reviewPassedTime: string; // 审核通过时间

  accessable: boolean; // 可进入本项目的详情页面
  checkable: boolean; // 可进入本项目的审核页面
  editable: boolean; // 可修改基础属性
  deletable: boolean; // 可删除此行记录
}

// 请求数据
export interface RecordsRequestProps {
  page: number;
  pageSize: number;
  filter?: FilterProps;
  sortStatus?: DataTableSortStatus<RecordProps>;
}

// 响应数据
export interface RecordsResponseProps {
  totalRecords: number;
  records: RecordProps[];
}

// 查询表单接口，请求的内容是用户容易理解的内容，因此属性较少
// 注意select和input的空值是不一样的，select必须是null，input必须是""
export interface FilterProps {
  type: "个人项目" | "工程项目" | null;
  name: string | "";
  oaId: string | "";
  state: "设计中" | "审核中" | "已结束" | "已作废" | null;
  createdByUserName: string | "";
  executedByUserName: string | "";
  reviewedByUserName: string | "";
}

// 新增
export interface AddProjectProps {
  type: "个人项目" | "工程项目"; // 项目类型
  name: string; // 项目名称
}

// 删除
export interface DeleteProjectProps {
  id: string; // 项目ID
}
